Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

[dataId].tsx 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import DataDetailsCard from '../../components/cards/data-details-card/DataDetailsCard';
  2. import { getDataIds } from '../../requests/dataIdsRequest';
  3. import { getSingleData } from '../../requests/singleDataRequest';
  4. import { GetStaticPropsContext, NextPage, NextPageContext } from 'next';
  5. import { ParsedUrlQuery } from 'querystring';
  6. import { SPersonResponse } from '../../utils/interface/personInterface';
  7. interface IParams extends ParsedUrlQuery {
  8. dataId: string;
  9. }
  10. interface IProp {
  11. selectedData: SPersonResponse;
  12. message: string;
  13. }
  14. const SignelDataPage: NextPage<IProp> = (props) => {
  15. const data = props.selectedData;
  16. if (!data) {
  17. return <h1>{props.message}</h1>;
  18. }
  19. return <DataDetailsCard data={data.singleData} />;
  20. };
  21. export const getStaticProps = async (context: GetStaticPropsContext) => {
  22. const pageParams = context.params as IParams;
  23. try {
  24. const data = await getSingleData(pageParams.dataId);
  25. return {
  26. props: {
  27. selectedData: data,
  28. message: 'Successfull',
  29. },
  30. revalidate: 60,
  31. };
  32. } catch (error) {
  33. if (error instanceof Error)
  34. return {
  35. props: {
  36. selectedData: null,
  37. message: error.message,
  38. },
  39. revalidate: 60,
  40. };
  41. else
  42. return {
  43. props: {
  44. selectedData: null,
  45. message: error,
  46. },
  47. revalidate: 60,
  48. };
  49. }
  50. };
  51. export async function getStaticPaths() {
  52. try {
  53. const firstPageDataIds = await getDataIds();
  54. const paths = firstPageDataIds.dataIds.map((id) => ({
  55. params: { dataId: id },
  56. }));
  57. return {
  58. paths: paths,
  59. fallback: 'blocking',
  60. };
  61. } catch (error) {
  62. return {
  63. paths: [],
  64. fallback: 'blocking',
  65. };
  66. }
  67. }
  68. export default SignelDataPage;